home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / kms20src.lha / KMSC / kmsconv.c < prev    next >
C/C++ Source or Header  |  1994-04-02  |  10KB  |  293 lines

  1. /**
  2.  **     KMSConv.c
  3.  **
  4.  **     Converts KMS_UAF.DAT or KMS_AREAS.DAT from old into new format.
  5.  **
  6.  **     © Copyright 1994 Thomas Schwarz, Germany
  7.  **                      All Rights Reserved.
  8.  **/
  9.  
  10. // Includes
  11.  
  12. #include <KMS/KMS.h>
  13.  
  14. // Defines
  15.  
  16. #define USAGE "KMSConv 1.1 -*- KMS Data Converter -*- (c)1994 Thomas Schwarz\n\n" \
  17.               "USAGE:\n" \
  18.               "%s -u <oldfile> <newfile>\n" \
  19.               "Converts KMS_UAF.DAT of KMS V1.75b into format of V1.80b.\n\n" \
  20.               "%s -a <oldfile> <newfile>\n" \
  21.               "Converts KMS_AREAS.DAT of KMS V1.80b into format of V1.81b.\n\n"
  22.  
  23. // Prototypes
  24.  
  25. UWORD MyBreak(VOID);
  26. VOID main(UWORD, STRPTR *);
  27.  
  28. // Declarations
  29.  
  30. /* V1.75b Userdaten-Struktur */
  31.  
  32. struct AltUserdaten
  33.    {
  34.    UWORD ID;
  35.    TEXT  Name[LEN_USERNAME+1];
  36.    TEXT  RealName[LEN_REALNAME+1];
  37.    TEXT  Street[LEN_STREET+1];
  38.    TEXT  City[LEN_CITY+1];
  39.    TEXT  Phone[LEN_PHONE+1];
  40.    TEXT  Prompt[LEN_UPROMPT+1];
  41.    UWORD Level;
  42.    UWORD Calls;
  43.    time_t LastCall;
  44.    UBYTE CharSet;
  45.    UBYTE PageLen;
  46.    UBYTE LineLen;
  47.    UBYTE Protocol;
  48.    ULONG Flags;
  49.    ULONG AccessBits;
  50.    };
  51.  
  52. /* V1.80b Brett-Struktur */
  53.  
  54. struct AltArea
  55.    {
  56.    TEXT Name[LEN_AREANAME+1];
  57.    TEXT Info[LEN_AREAINFO+1];
  58.    TEXT MBName[LEN_MBNAME+1];
  59.    TEXT FilePath[LEN_FILEAREA+1];
  60.    UWORD ID;
  61.    UBYTE Type;
  62.    UWORD Level;
  63.    ULONG AccessBits;
  64.    ULONG WriteFlag;
  65.    ULONG EditFlag;
  66.    UBYTE Access;
  67.    UBYTE QuoteStr;
  68.    UBYTE PQuoteStr;
  69.    UBYTE ResendStr;
  70.    UBYTE ForwardStr;
  71.    UBYTE OriginStr;
  72.    UWORD HoldNum;
  73.    UWORD HoldDays;
  74.    UWORD Mother;
  75.    UWORD Daughter;
  76.    UWORD Next;
  77.    };
  78.  
  79. STRPTR  Version = "\0$VER: KMSConv 1.1 ("__COMMODORE_DATE__")";
  80.  
  81. // Procedures
  82.  
  83. UWORD MyBreak(VOID)
  84.    {
  85.    return 0;
  86.    }
  87.  
  88. VOID main(UWORD argc, STRPTR *argv)
  89.    {
  90.    struct AltUserdaten altuser;
  91.    struct AltArea altarea;
  92.    struct Userdaten neuuser;
  93.    struct Area neuarea;
  94.    BOOL aconv = FALSE;
  95.    FILE *infile, *outfile;
  96.    UWORD num = 0;
  97.  
  98.    onbreak(MyBreak);
  99.  
  100.    if(argc < 4 || argc > 4 || !strcmp("?", argv[1]) || (strcmp("-u", argv[1]) && strcmp("-a", argv[1])))
  101.       {
  102.       printf(USAGE, argv[0], argv[0]);
  103.       exit(0);
  104.       }
  105.  
  106.    if(!strcmp("-a", argv[1]))
  107.       aconv = TRUE;
  108.  
  109.    if(!(infile = fopen(argv[2], "r")))
  110.       exit(20);
  111.    else if(!(outfile = fopen(argv[3], "w")))
  112.       {
  113.       fclose(infile);
  114.       exit(20);
  115.       }
  116.    else
  117.       {
  118.       if(!aconv)
  119.          {
  120.          /* KMS_UAF.DAT konvertieren */
  121.  
  122.          while(fread(&altuser, 1, sizeof(struct AltUserdaten), infile))
  123.             {
  124.             clrmem(&neuuser, sizeof(neuuser));
  125.  
  126.             neuuser.ID = ++num;
  127.             strcpy(neuuser.Name    , altuser.Name);
  128.             strcpy(neuuser.RealName, altuser.RealName);
  129.             strcpy(neuuser.Street  , altuser.Street);
  130.             strcpy(neuuser.City    , altuser.City);
  131.             strcpy(neuuser.Phone   , altuser.Phone);
  132.             strcpy(neuuser.Prompt  , altuser.Prompt);
  133.             neuuser.Level          = altuser.Level;
  134.             neuuser.Calls          = altuser.Calls;
  135.             neuuser.LastCall       = altuser.LastCall;
  136.             neuuser.CharSet        = altuser.CharSet;
  137.             neuuser.PageLen        = altuser.PageLen;
  138.             neuuser.LineLen        = altuser.LineLen;
  139.             neuuser.Protocol       = altuser.Protocol;
  140.             neuuser.Flags          = altuser.Flags;
  141.             neuuser.AccessBits     = altuser.AccessBits;
  142.             neuuser.Quota          = 5;
  143.  
  144.             fprintf(outfile, "%d\n%s\n%s\n%s\n",  neuuser.ID,
  145.                                                   neuuser.Name,
  146.                                                   neuuser.RealName,
  147.                                                   neuuser.Street);
  148.             fprintf(outfile, "%s\n%s\n%s\n",      neuuser.City,
  149.                                                   neuuser.Phone,
  150.                                                   neuuser.Prompt);
  151.             fprintf(outfile, "%d\n%d\n%ld\n",     neuuser.Level,
  152.                                                   neuuser.Calls,
  153.                                                   neuuser.LastCall);
  154.             fprintf(outfile, "%d\n%d\n%d\n%d\n",  neuuser.CharSet,
  155.                                                   neuuser.PageLen,
  156.                                                   neuuser.LineLen,
  157.                                                   neuuser.Protocol);
  158.             fprintf(outfile, "%ld\n%ld\n%d\n\n",  neuuser.Flags,
  159.                                                   neuuser.AccessBits,
  160.                                                   neuuser.Quota);
  161.             }
  162.          }
  163.       else
  164.          {
  165.          /* KMS_AREAS.DAT konvertieren */
  166.          
  167.          TEXT buff[LEN_MBNAME+2]; /* MBNAME ist laengstes Element */
  168.  
  169.          while(fgets(buff, LEN_AREANAME+2, infile))
  170.             {
  171.             clrmem(&altarea, sizeof(struct AltArea));
  172.             clrmem(&neuarea, sizeof(struct Area));
  173.  
  174.             if(strlen(buff))
  175.                buff[strlen(buff)-1] = '\0'; /* Linefeed am Ende entfernen */
  176.  
  177.             strcpy(altarea.Name, buff);
  178.             if(fgets(buff, LEN_AREAINFO+2, infile))
  179.                {
  180.                if(strlen(buff))
  181.                   buff[strlen(buff)-1] = '\0';
  182.                strcpy(altarea.Info, buff);
  183.                }
  184.             if(fgets(buff, LEN_MBNAME+2, infile))
  185.                {
  186.                if(strlen(buff))
  187.                   buff[strlen(buff)-1] = '\0';
  188.                strcpy(altarea.MBName, buff);
  189.                }
  190.             if(fgets(buff, LEN_FILEAREA+2, infile))
  191.                {
  192.                if(strlen(buff))
  193.                   buff[strlen(buff)-1] = '\0';
  194.                strcpy(altarea.FilePath, buff);
  195.                }
  196.             if(fgets(buff, LEN_NUMBER+2, infile))
  197.                altarea.ID = (UWORD)atoi(buff);
  198.             if(fgets(buff, LEN_NUMBER+2, infile))
  199.                altarea.Type = (UBYTE)atoi(buff);
  200.             if(fgets(buff, LEN_NUMBER+2, infile))
  201.                altarea.Level = (UWORD)atoi(buff);
  202.             if(fgets(buff, LEN_NUMBER+2, infile))
  203.                altarea.AccessBits = (ULONG)atol(buff);
  204.             if(fgets(buff, LEN_NUMBER+2, infile))
  205.                altarea.WriteFlag = (ULONG)atol(buff);
  206.             if(fgets(buff, LEN_NUMBER+2, infile))
  207.                altarea.EditFlag = (ULONG)atol(buff);
  208.             if(fgets(buff, LEN_NUMBER+2, infile))
  209.                altarea.Access = (UBYTE)atoi(buff);
  210.             if(fgets(buff, LEN_NUMBER+2, infile))
  211.                altarea.QuoteStr = (UBYTE)atoi(buff);
  212.             if(fgets(buff, LEN_NUMBER+2, infile))
  213.                altarea.PQuoteStr = (UBYTE)atoi(buff);
  214.             if(fgets(buff, LEN_NUMBER+2, infile))
  215.                altarea.ResendStr = (UBYTE)atoi(buff);
  216.             if(fgets(buff, LEN_NUMBER+2, infile))
  217.                altarea.ForwardStr = (UBYTE)atoi(buff);
  218.             if(fgets(buff, LEN_NUMBER+2, infile))
  219.                altarea.OriginStr = (UBYTE)atoi(buff);
  220.             if(fgets(buff, LEN_NUMBER+2, infile))
  221.                altarea.HoldNum = (UWORD)atoi(buff);
  222.             if(fgets(buff, LEN_NUMBER+2, infile))
  223.                altarea.HoldDays = (UWORD)atoi(buff);
  224.             if(fgets(buff, LEN_NUMBER+2, infile))
  225.                altarea.Mother = (UWORD)atoi(buff);
  226.             if(fgets(buff, LEN_NUMBER+2, infile))
  227.                altarea.Daughter = (UWORD)atoi(buff);
  228.             if(fgets(buff, LEN_NUMBER+2, infile))
  229.                altarea.Next = (UWORD)atoi(buff);
  230.  
  231.             strcpy(neuarea.Name, altarea.Name);
  232.             strcpy(neuarea.Info, altarea.Info);
  233.             strcpy(neuarea.MBName, altarea.MBName);
  234.             strcpy(neuarea.FilePath, altarea.FilePath);
  235.             neuarea.ID = altarea.ID;
  236.             neuarea.Type = altarea.Type;
  237.             if(altarea.Access & AACC_READ)
  238.                neuarea.ReadLevel = (UBYTE)altarea.Level;
  239.             else
  240.                neuarea.ReadLevel = 255;
  241.             if(altarea.Access & AACC_WRITE)
  242.                neuarea.WriteLevel = (UBYTE)altarea.Level;
  243.             else
  244.                neuarea.WriteLevel = 255;
  245.             if(altarea.Access & AACC_EDIT)
  246.                neuarea.EditLevel = (UBYTE)altarea.Level;
  247.             else
  248.                neuarea.EditLevel = 255;
  249.             neuarea.AccessBits = altarea.AccessBits;
  250.             neuarea.WriteFlag = (UWORD)altarea.WriteFlag;
  251.             neuarea.QuoteStr = altarea.QuoteStr;
  252.             neuarea.PQuoteStr = altarea.PQuoteStr;
  253.             neuarea.ResendStr = altarea.ResendStr;
  254.             neuarea.ForwardStr = altarea.ForwardStr;
  255.             neuarea.OriginStr = altarea.OriginStr;
  256.             neuarea.HoldNum = altarea.HoldNum;
  257.             neuarea.HoldDays = altarea.HoldDays;
  258.             neuarea.Mother = altarea.Mother;
  259.             neuarea.Daughter = altarea.Daughter;
  260.             neuarea.Next = altarea.Next;
  261.  
  262.             fprintf(outfile,"%s\n%s\n%s\n%s\n",     neuarea.Name,
  263.                                                     neuarea.Info,
  264.                                                     neuarea.MBName,
  265.                                                     neuarea.FilePath);
  266.             fprintf(outfile,"%d\n%d\n%d\n%d\n%d\n", neuarea.ID,
  267.                                                     neuarea.Type,
  268.                                                     neuarea.ReadLevel,
  269.                                                     neuarea.WriteLevel,
  270.                                                     neuarea.EditLevel);
  271.             fprintf(outfile,"%ld\n%d\n",            neuarea.AccessBits,
  272.                                                     neuarea.WriteFlag);
  273.             fprintf(outfile,"%d\n%d\n%d\n%d\n%d\n", neuarea.QuoteStr,
  274.                                                     neuarea.PQuoteStr,
  275.                                                     neuarea.ResendStr,
  276.                                                     neuarea.ForwardStr,
  277.                                                     neuarea.OriginStr);
  278.             fprintf(outfile,"%d\n",                 neuarea.HoldNum);
  279.             fprintf(outfile,"%d\n",                 neuarea.HoldDays);
  280.             fprintf(outfile,"%d\n%d\n%d\n",         neuarea.Mother,
  281.                                                     neuarea.Daughter,
  282.                                                     neuarea.Next);
  283.             }
  284.  
  285.          fclose(infile);
  286.          fclose(outfile);
  287.          }
  288.       }
  289.  
  290.    exit(0);
  291.    }
  292.  
  293.